package view;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.jgoodies.forms.factories.FormFactory;

import controller.MainController;
import exceptions.MyException;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFormattedTextField;

import javax.swing.JCheckBox;

public class PatientAnlegenDialog extends JDialog {

	private boolean done;
	private MainController mainController;

	private final JPanel panelOben = new JPanel();
	private JTextField textFieldVorname;
	private JTextField textFieldNachname;
	private JFormattedTextField formattedTextFieldGeburtsdatum;
	private JTextField textFieldStrasse;
	private JTextField textFieldHausnummer;
	private JTextField textFieldPostleitzahl;
	private JTextField textFieldOrt;
	private JTextField textFieldTelefonnummer;
	private JCheckBox chckbxPrivatVersichert;
	private JTextField textFieldKrankenkasse;
	private JTextField textFieldVersicherungsnummer;
	private JTextField textFieldUeberweisungsgrund;

	/**
	 * Create the dialog.
	 */
	public PatientAnlegenDialog(JDialog owner, MainController mainController) {
		super(owner, true);
		setTitle("Patient anlegen/\u00E4ndern");
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 500);
		done = false;
		this.mainController = mainController;
		
		getContentPane().setLayout(new BorderLayout());
		panelOben.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(panelOben, BorderLayout.CENTER);
		panelOben.setLayout(new FormLayout(new ColumnSpec[] {
				FormFactory.RELATED_GAP_COLSPEC,
				FormFactory.DEFAULT_COLSPEC,
				FormFactory.RELATED_GAP_COLSPEC,
				ColumnSpec.decode("default:grow"),},
			new RowSpec[] {
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,}));
		{
			JLabel labelVorname = new JLabel("Vorname");
			panelOben.add(labelVorname, "2, 2, right, default");
		}
		{
			textFieldVorname = new JTextField();
			panelOben.add(textFieldVorname, "4, 2, fill, default");
			textFieldVorname.setColumns(10);
		}
		{
			JLabel labelNachname = new JLabel("Nachname");
			panelOben.add(labelNachname, "2, 4, right, default");
		}
		{
			textFieldNachname = new JTextField();
			panelOben.add(textFieldNachname, "4, 4, fill, default");
			textFieldNachname.setColumns(10);
		}
		{
			JLabel labelGeburtsdatum = new JLabel("Geburtsdatum");
			panelOben.add(labelGeburtsdatum, "2, 6, right, default");
		}
		{
			formattedTextFieldGeburtsdatum = new JFormattedTextField(new SimpleDateFormat("dd.MM.yyyy"));
			panelOben.add(formattedTextFieldGeburtsdatum, "4, 6, fill, default");
		}
		{
			JLabel labelStrasse = new JLabel("Stra\u00DFe");
			panelOben.add(labelStrasse, "2, 8, right, default");
		}
		{
			textFieldStrasse = new JTextField();
			panelOben.add(textFieldStrasse, "4, 8, fill, default");
			textFieldStrasse.setColumns(10);
		}
		{
			JLabel labelHausnummer = new JLabel("Hausnummer");
			panelOben.add(labelHausnummer, "2, 10, right, default");
		}
		{
			textFieldHausnummer = new JTextField();
			panelOben.add(textFieldHausnummer, "4, 10, fill, default");
			textFieldHausnummer.setColumns(10);
		}
		{
			JLabel labelPostleitzahl = new JLabel("Postleitzahl");
			panelOben.add(labelPostleitzahl, "2, 12, right, default");
		}
		{
			textFieldPostleitzahl = new JTextField();
			panelOben.add(textFieldPostleitzahl, "4, 12, fill, default");
			textFieldPostleitzahl.setColumns(10);
		}
		{
			JLabel labelOrt = new JLabel("Ort");
			panelOben.add(labelOrt, "2, 14, right, default");
		}
		{
			textFieldOrt = new JTextField();
			panelOben.add(textFieldOrt, "4, 14, fill, default");
			textFieldOrt.setColumns(10);
		}
		{
			JLabel labelTelefonnummer = new JLabel("Telefonnummer");
			panelOben.add(labelTelefonnummer, "2, 16, right, default");
		}
		{
			textFieldTelefonnummer = new JTextField();
			panelOben.add(textFieldTelefonnummer, "4, 16, fill, default");
			textFieldTelefonnummer.setColumns(10);
		}
		{
			JLabel labelVersicherung = new JLabel("Versicherung");
			panelOben.add(labelVersicherung, "2, 18, right, default");
		}
		{
			chckbxPrivatVersichert = new JCheckBox("Privat versichert");
			panelOben.add(chckbxPrivatVersichert, "4, 18");
		}
		{
			JLabel labelKrankenkasse = new JLabel("Krankenkasse");
			panelOben.add(labelKrankenkasse, "2, 20, right, default");
		}
		{
			textFieldKrankenkasse = new JTextField();
			panelOben.add(textFieldKrankenkasse, "4, 20, fill, default");
			textFieldKrankenkasse.setColumns(10);
		}
		{
			JLabel labelVersicherungsnummer = new JLabel("Versicherungsnummer");
			panelOben.add(labelVersicherungsnummer, "2, 22, right, default");
		}
		{
			textFieldVersicherungsnummer = new JTextField();
			panelOben.add(textFieldVersicherungsnummer, "4, 22, fill, default");
			textFieldVersicherungsnummer.setColumns(10);
		}
		{
			JLabel labelUeberweisungsgrund = new JLabel("\u00DCberweisungsgrund");
			panelOben.add(labelUeberweisungsgrund, "2, 24, right, default");
		}
		{
			textFieldUeberweisungsgrund = new JTextField();
			panelOben.add(textFieldUeberweisungsgrund, "4, 24, fill, default");
			textFieldUeberweisungsgrund.setColumns(10);
		}
		{
			JPanel panelUnten = new JPanel();
			panelUnten.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(panelUnten, BorderLayout.SOUTH);
			{
				JButton buttonOK = new JButton("OK");
				buttonOK.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						String vorname = textFieldVorname.getText();
						String nachname = textFieldNachname.getText();
						Date geburtsdatum = (Date) formattedTextFieldGeburtsdatum.getValue();
						String strasse = textFieldStrasse.getText();
						String hausnummer = textFieldHausnummer.getText();
						String postleitzahl = textFieldPostleitzahl.getText();
						String ort = textFieldOrt.getText();
						String telefonnummer = textFieldTelefonnummer.getText();
						boolean privatVersichert = chckbxPrivatVersichert.isSelected();
						String krankenkasse = textFieldKrankenkasse.getText();
						String versicherungsnummer = textFieldVersicherungsnummer.getText();
						String ueberweisungsgrund = textFieldUeberweisungsgrund.getText();
						
						try {
							PatientAnlegenDialog.this.mainController.getPatientenController().createPatient(vorname, nachname, geburtsdatum, strasse, hausnummer, postleitzahl, ort, telefonnummer, privatVersichert, krankenkasse, versicherungsnummer, ueberweisungsgrund);
							
							done = true;
							setVisible(false);
							dispose();
						}
						catch (MyException myException) {
							JOptionPane.showMessageDialog(null, myException.getMessage());
						}
					}
				});
				buttonOK.setActionCommand("OK");
				panelUnten.add(buttonOK);
				getRootPane().setDefaultButton(buttonOK);
			}
			{
				JButton buttonAbbrechen = new JButton("Abbrechen");
				buttonAbbrechen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						setVisible(false);
						dispose();
					}
				});
				buttonAbbrechen.setActionCommand("Cancel");
				panelUnten.add(buttonAbbrechen);
			}
		}
	}

	public boolean showDialog() {
		setVisible(true);
		return done;
	}

}
